
/******************************************************
Cours:   LOG121
Session: A2013
Groupe:  04
Projet: Laboratoire #4
Étudiant(e)s: Fredy Alexander Bonilla, Renaud Vincent, Simon Castro
                            
Professeur : Francis Cardinal
Nom du fichier: ZoomOut.java
Date créé: 2013-11-22
Date dern. modif. 2013-11-23
*******************************************************
Historique des modifications
*******************************************************
2013-11-22 Version1
2013-11-23 Version2
*******************************************************/
/**
 * Commande dont l'execution effectue un zoom sur une perspective et notifie les
 * observateurs pour mettre a jour les informations.
 * 
 * @author Simon
 * @author Fredy
 *
 */
public class Zoom implements Command {
	
	/************
	 * Attributs
	 ************/
	private int indice;
	private Perspective p;
	private double scaleH;
	private double scaleL;
	
	/**
	 * Constructeur de la clase Zoom recevant une indice pour identifier le zoom
	 * et la perspective de l'image
	 * 
	 * @param indice
	 * @param p
	 */
	public Zoom(int indice, Perspective p){
		this.indice = indice;
		this.p = p;
		this.scaleH=0;
		this.scaleL=0;
	}
	
	@Override
	public void execute() {
		//Si c'est un zoomIN
		if(indice == -1){
			obtenirPourcentage(indice);
			activerZoom();
		}
		//si c'est un zoomOut
		else if(indice == 1){
			if(this.p.getPourcentage()>0){
				obtenirPourcentage(indice);
				activerZoom();
			}
			else
				System.out.println("l'image ne peut etre reduite davantage");
		}
	}

	/**
	 * Methode de Zoom qui modifie les attribut de la perspective selon un scale
	 */
	private void activerZoom(){
		
		this.p.setCoinX(p.getCoinX()-(int)scaleL/2);
		this.p.setCoinY(p.getCoinY()-(int)scaleH/2);
		this.p.setLargeur(p.getLargeur()+(int)scaleL);
		this.p.setHauteur(p.getHauteur()+(int)scaleH);
		
		this.p.notifierObservateurs();
	}
	
	/**
	 * Methode permetant de determinant l'echelle de pourcentage de zoom. Par
	 * default elle est a 5. Elle ajuste ce dernier pour chaque appel. 
	 * 
	 * @param indice
	 */
	private void obtenirPourcentage(int indice){
		
		//Pour des zoom de 5%, il faut diviseur la largeur et la hauteur par 20
		scaleH = this.p.getHauteurEcran()/20*-indice;
		scaleL = this.p.getLargeurEcran()/20*-indice;
		
		//Ajustement du pourcentage
		
		//zoom in
		if(indice==-1){
			this.p.setPourcentage(this.p.getPourcentage()+5);
		}
		//zoom out
		else if(indice==1){
			this.p.setPourcentage(this.p.getPourcentage()-5);
		}
	}

}
